package org.lifxue.jqda.util;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.lifxue.jqda.data.DataUtil;
import org.lifxue.jqda.data.XmlData;
import org.lifxue.jqda.data.bean.AppInfoBean;

/**
 * 
 * @Description: 全局变量
 * @Author: zhangzuoqiang
 * @Date: Sep 26, 2011
 */
public class GlobalVar {

	private static Log logger = LogFactory.getLog(GlobalVar.class);
	public static String USER_HOME;// //用户主目录
	public static String NEW_LINE;// 换行符
	public static String FILE_PATH_DELIMITER; // 文件系统分隔符
	public static char OS; // 操作系统类型
	// 可变变量
	public static HashMap<String, List<AppInfoBean>> APPLICATIONS;// 快速启动应用程序列表
	public static HashMap<String, List<String>> APP_SCAN_DIR;// 快速启动扫描目录
	public static HashMap<String, String> CONFIG;// config配置文件内容
	// 热键数据 String -- 程序全路径；
	// String --热键标识和组合键（其中第一位是标识，后面是组合键，中间使用“:”间隔）
	public static HashMap<String, String> HOTKEY;
	public static List<String> INDEX_SCAN_DIR;// 搜索扫描目录
	public static List<String> INDEX_SCAN_TYPE;// 搜索文件类型
	public static String INDEX_CYCLE;// 搜索周期
	public static String INDEX_LASTTIME;// 最后一次搜索的时间（毫秒）

	// 初始化全局变量
	public static void init() {
		initSystemVar();
		CONFIG = new HashMap<String, String>();
		HOTKEY = new HashMap<String, String>();
		initConfig();
		APPLICATIONS = new HashMap<String, List<AppInfoBean>>();
		APP_SCAN_DIR = new HashMap<String, List<String>>();
		initApps();
		INDEX_SCAN_DIR = new ArrayList<String>();
		INDEX_SCAN_TYPE = new ArrayList<String>();
		INDEX_CYCLE = "每天一次";
		Date date = new Date();
		INDEX_LASTTIME = String.valueOf(date.getTime());// 当前时间（毫秒）

		initIndex();
	}

	/**
	 * 初始化一些不能更改的系统参数
	 */
	private static void initSystemVar() {
		// 用户主目录
		USER_HOME = System.getProperty("user.home");
		// 换行分隔符
		NEW_LINE = System.getProperty("line.separator");
		// 文件路径分隔符
		FILE_PATH_DELIMITER = System.getProperty("file.separator");
		// 操作系统类型
		if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
			OS = GlobalConstant.LINUX;
		} else if (System.getProperty("os.name").startsWith("Windows")) {
			OS = GlobalConstant.WINDOWS;
		} else {
			OS = GlobalConstant.OTHER_OS;
		}
	}

	/**
	 * 解析Apps数据
	 */
	private static void initApps() {
		File file = new File(GlobalVar.USER_HOME
				+ GlobalVar.FILE_PATH_DELIMITER
				+ GlobalConstant.DEFAULT_CONFIG_DIR
				+ GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.APPS_FILE);
		if (!FileAndDir.findFile(GlobalConstant.APPS_FILE, GlobalVar.USER_HOME,
				GlobalVar.FILE_PATH_DELIMITER)) {// 文件不存在
			FileAndDir.createAppHome(GlobalVar.USER_HOME,
					GlobalVar.FILE_PATH_DELIMITER);// 创建目录
			try {
				new XmlData().createXml(file);// 创建xml文件（空）
			} catch (Exception ex) {
				logger.debug(ex);
			}
		} else {
			XmlData xd = new XmlData();
			xd.readAppsFile(file);
			GlobalVar.APPLICATIONS = xd.getApps_app();
			GlobalVar.APP_SCAN_DIR = xd.getApps_dirs();
		}
	}

	/**
	 * 解析配置文件
	 */
	private static void initConfig() {
		File file = new File(GlobalVar.USER_HOME
				+ GlobalVar.FILE_PATH_DELIMITER
				+ GlobalConstant.DEFAULT_CONFIG_DIR
				+ GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.CONFIG_FILE);
		if (!FileAndDir.findFile(GlobalConstant.CONFIG_FILE,
				GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER)) {// 文件不存在
			FileAndDir.createAppHome(GlobalVar.USER_HOME,
					GlobalVar.FILE_PATH_DELIMITER);// 创建目录
			try {
				new XmlData().createXml(file);// 创建xml文件（空）
			} catch (Exception ex) {
				logger.debug(ex);
			}
		} else {
			XmlData xd = new XmlData();
			xd.readConfigFile(file);
			GlobalVar.CONFIG = xd.getConfigs_config();
			GlobalVar.HOTKEY = xd.getConfigs_hotkey();
		}
	}

	/**
	 * 解析索引配置文件
	 */
	private static void initIndex() {
		File file = new File(GlobalVar.USER_HOME
				+ GlobalVar.FILE_PATH_DELIMITER
				+ GlobalConstant.DEFAULT_CONFIG_DIR
				+ GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.INDEX_FILE);
		if (!FileAndDir.findFile(GlobalConstant.INDEX_FILE,
				GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER)) {// 文件不存在
			FileAndDir.createAppHome(GlobalVar.USER_HOME,
					GlobalVar.FILE_PATH_DELIMITER);// 创建目录
			try {
				new XmlData().createXml(file);// 创建xml文件（空）
				DataUtil.updateIndexFile();// 保存数据到文件
			} catch (Exception ex) {
				logger.debug(ex);
			}
		} else {
			XmlData xd = new XmlData();
			xd.readIndexerFile(file);
			GlobalVar.INDEX_SCAN_DIR = xd.getINDEX_DIR();
			GlobalVar.INDEX_SCAN_TYPE = xd.getINDEX_TYPE();
			GlobalVar.INDEX_CYCLE = xd.getINDEX_CYCLE();
			GlobalVar.INDEX_LASTTIME = xd.getINDEX_LASTTIME();
		}
	}

}
